package com.hxht.cmp.mapper;

import com.hxht.cmp.entity.Plan;
import com.hxht.cmp.pojo.SearchCriteria;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;
import java.util.Map;

@Repository
public interface PlanMapper extends Mapper<Plan> {
    /**
     * 不同状态案件的统计查询
     *
     * @param map
     * @return
     */
    int getCountCourtByStatus(Map<String, Object> map);

    /**
     * 区域法院开庭总数
     *
     * @param courtUidList
     */
    int getCountOpenCourtNum(@Param("courtUidList") List<String> courtUidList);


    /**
     * 查询区域法院今日开庭和明日预告的案件排期信息
     *
     * @param map
     * @return
     */
    List<Plan> selectListAllCasePlan(Map<String, Object> map);

    /**
     * 查询单法院今日开庭和明日预告的案件排期信息
     *
     * @param courtUid
     * @param date
     * @return
     */
    List<Plan> selectListCasePlan(@Param("courtUid") String courtUid, @Param("date") String date);

    /**
     * 按条件获取庭审回顾案件信息
     *
     * @param searchCriteria
     * @return
     */
    List<Map<String, Object>> getReviewByConditions(@Param("param") SearchCriteria searchCriteria);

    /**
     * 按条件获取庭审回顾案件信息总数
     *
     * @param searchCriteria
     * @return
     */
    int getReviewCountByConditions(@Param("param") SearchCriteria searchCriteria);

    /**
     * 按条件获取庭审回顾案件信息
     *
     * @param searchCriteria
     * @return
     */
    List<Map<String, Object>> getPlanByConditions(@Param("param") SearchCriteria searchCriteria);

    /**
     * 按条件获取庭审回顾案件信息总数
     *
     * @param searchCriteria
     * @return
     */
    int getPlanCountByConditions(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询案件排期信息
     *
     * @param searchCriteria
     * @return
     */
    List<Plan> selectJudgeCasePlan(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询案件回顾信息
     *
     * @param searchCriteria
     * @return
     */
    List<Plan> selectJudgeCaseReview(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询更多开庭
     *
     * @param searchCriteria
     */
    List<Map<String, Object>> selectMoreCasePlan(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询更多回顾
     *
     * @param searchCriteria
     */
    List<Map<String, Object>> selectMoreCaseReview(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询更多开庭总数
     *
     * @param searchCriteria
     */
    int getCountMoreCasePlan(@Param("param") SearchCriteria searchCriteria);

    /**
     * 多法官查询更多回顾总数
     *
     * @param searchCriteria
     * @return
     */
    int getCountMoreCaseReview(@Param("param") SearchCriteria searchCriteria);

    /**
     * 区域法院开庭次数统计
     *
     * @param courtUidList
     * @param caseType
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getCaseCountForArea(@Param("courtUidList") List<String> courtUidList, @Param("caseType") String caseType, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 单个法院开庭次数统计，按法庭分组
     *
     * @param courtUid
     * @param caseType
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getCaseCountForSingle(@Param("courtUid") String courtUid, @Param("caseType") String caseType, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 法官开庭数
     *
     * @param param
     * @return
     */
    List<Map<String,Object>> selectListJudgeOpenNum(Map<String, String> param);

    /**
     * 总容量
     * @param courtUidList
     * @return
     */
    int getCountFileSize(@Param("courtUidList") List<String> courtUidList);

    /**
     * 区域法院开庭时长统计
     *
     * @param caseType
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getCaseTimeCountForArea(@Param("caseType") String caseType, @Param("startDate") String startDate, @Param("endDate") String endDate);

    /**
     * 单个法院开庭时长统计，按法庭分组
     *
     * @param courtUid
     * @param caseType
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getCaseTimeCountForSingle(@Param("courtUid") String courtUid, @Param("caseType") String caseType, @Param("startDate") String startDate, @Param("endDate") String endDate);

}